WebCodecs VideoFrameã®é åã³ããŒæ©èœãæ¢æ±ããWebã¢ããªã±ãŒã·ã§ã³ã«ãããå¹ççãªéšåãã¬ãŒã è€è£œãæé©åãé«åºŠãªåç»åŠçæè¡ã«ã€ããŠè§£èª¬ããŸãã
WebCodecs VideoFrameé åã³ããŒïŒéšåçãªãã¬ãŒã ã®è€è£œãšæé©å
WebCodecs APIã¯ãWebããŒã¹ã®ã¡ãã£ã¢åŠçã«é©åœããããããåç»ãšé³å£°ã®ãšã³ã³ãŒãã£ã³ã°ããã³ãã³ãŒãã£ã³ã°ã«ãããŠåäŸã®ãªãå¶åŸ¡ãæäŸããŸããç¹ã«åŒ·åãªæ©èœã®äžã€ããVideoFrameãªããžã§ã¯ãã«å¯Ÿããé åã³ããŒã®å®è¡èœåã§ãããã®æè¡ã¯ããã°ãã°éšåçãªãã¬ãŒã è€è£œãšåŒã°ããéçºè
ãåç»ãã¬ãŒã ã®ç¹å®ã»ã¯ã·ã§ã³ãå¹ççã«æœåºã»åå©çšããããšãå¯èœã«ããæ§ã
ãªæé©åãé«åºŠãªåç»åŠçã·ããªãªãžã®æãéããŸãããã®èšäºã§ã¯ãWebCodecs VideoFrameã®é åã³ããŒæ©èœã«ã€ããŠæ·±ãæãäžãããã®å¿çšäŸãå©ç¹ããããŠWebéçºè
ã®ã°ããŒãã«ãªèªè
åãã®å®è£
è©³çŽ°ãæ¢ããŸãã
VideoFrameé åã³ããŒã®çè§£
VideoFrameã®é åã³ããŒã¯ããã®æ žå¿ã«ãããŠãå
ã®ãã¬ãŒã ã®äžéšã®ã¿ãå«ãæ°ããVideoFrameãªããžã§ã¯ããäœæããããšã§ããããã¯ããœãŒã¹VideoFrameããã³ããŒããé·æ¹åœ¢ã®é åïŒå·Šäžã®è§ã®åº§æšãšå¹
/é«ãã§å®çŸ©ïŒãæå®ããããšã§å®çŸãããŸããçµæãšããŠåŸããããã¬ãŒã ã¯ãæå®ãããé åã®è€è£œã§ããããããç¬ç«ããŠãããªãåŠçããšã³ã³ãŒãã£ã³ã°ã«äœ¿çšããããšãã§ããŸãã
ãã®ããã»ã¹ã¯ãåã«åç»ãã¹ã±ãŒãªã³ã°ãããã¯ãããã³ã°ãããããã®ãšã¯ç°ãªããåç»ãã¬ãŒã å ã®ç¹å®ã®èŠçŽ ãéžæçã«è€è£œããããšãã§ããŸããäŸãã°ãããŽãç¹å®ã®åããªããžã§ã¯ãããŸãã¯ãããªãåæã匷調ã®ããã®é¢å¿é åãè€è£œãããå Žåãããã§ãããã
WebCodecs APIã¯ãVideoFrameãªããžã§ã¯ãã«copyTo()ã¡ãœãããæäŸããŠããããããé åã³ããŒãå®è¡ããããã®äž»èŠãªã¡ã«ããºã ã§ãããã®ã¡ãœããã䜿çšãããšãã³ããŒå
ã®VideoFrameãã³ããŒãããœãŒã¹é åãããã³ã³ããŒããã»ã¹ãå¶åŸ¡ããããã®æ§ã
ãªãªãã·ã§ã³ãæå®ã§ããŸãã
ãŠãŒã¹ã±ãŒã¹ãšå¿çšäŸ
VideoFrameã®é åã³ããŒã«ã¯ãWebããŒã¹ã®ã¡ãã£ã¢åŠçã«ãããŠæ°å€ãã®å¿çšäŸããããŸãã以äžã«äž»èŠãªäŸãããã€ãæããŸãïŒ
1. åç»ãšã³ã³ãŒãã£ã³ã°ã®æé©å
åç»ãã¬ãŒã ã®ç¹å®é åãæ¯èŒçã«éçã§ããããäºæž¬å¯èœãªå€åãããã·ããªãªã§ã¯ãé åã³ããŒã䜿çšããŠåç»ãšã³ã³ãŒãã£ã³ã°ãå€§å¹ ã«æé©åã§ããŸãããã¬ãŒã ã®åçãªéšåãåé¢ãããããã®é åã®ã¿ããšã³ã³ãŒãããããšã§ãå šäœã®ãããã¬ãŒããåæžãããšã³ã³ãŒãã£ã³ã°å¹çãåäžãããããšãã§ããŸãã
äŸïŒ äž»ãªã³ã³ãã³ãããã¬ãŒã³ããŒã·ã§ã³ã¹ã©ã€ãã§ããã©ã€ãã¹ããªãŒãã³ã°ã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸããããã¹ããŒã«ãŒã®ãããªãã£ãŒãã¯ãã¬ãŒã ã®ããäžéšããå ããŠããªããããããŸãããã¹ããŒã«ãŒã®é åãšå€åããã¹ã©ã€ãã³ã³ãã³ãã®ã¿ãã³ããŒããŠãšã³ã³ãŒãããããšã§ãéçãªèæ¯ãåãšã³ã³ãŒãããã®ãé¿ããããå¹ççãªã¹ããªãŒã ãå®çŸã§ããŸãã
2. ããžã¥ã¢ã«ãšãã§ã¯ãã®å®è£
é åã³ããŒã¯ã次ã®ãããªæ§ã ãªããžã¥ã¢ã«ãšãã§ã¯ããå®è£ ããããã®åŒ·åãªããŒã«ãšãªãåŸãŸãïŒ
- ãªããžã§ã¯ã远跡ãšè€è£œïŒ åç»å ã®åããªããžã§ã¯ãã远跡ããããããã¬ãŒã å šäœã«è€è£œããŠé¢çœãèŠèŠå¹æãäœæããŸãã
- é åããŒã¹ã®ãŒãããã·ã£ãŒãåïŒ é¡ãé¢å¿é åãªã©ãåç»ã®ç¹å®é åã«ã®ã¿ãŒãããã·ã£ãŒãåã®ãšãã§ã¯ããé©çšããŸãã
- ãã¯ãã£ãŒã€ã³ãã¯ãã£ãŒå¹æã®äœæïŒ å°ããªåç»ãã¬ãŒã é åã倧ããªãã¬ãŒã ã«ã³ããŒããããšã§ããã¯ãã£ãŒã€ã³ãã¯ãã£ãŒã®ã¬ã€ã¢ãŠããç°¡åã«å®è£ ããŸãã
- ç¹å®é åã®ãã€ã©ã€ãïŒ é åãã³ããŒããã«ã©ãŒãã£ã«ã¿ãŒãä»ã®èŠèŠçãªåŒ·èª¿ãé©çšããŠãããã«æ³šæãåŒããŸãã
äŸïŒ ãã®äžè¬çãªå¿çšäŸãšããŠãåç»ã®ããé åãã³ããŒããŠæ¡å€§ãããã®é åå ã®ã³ã³ãã³ããæ¡å€§ãããããžã¿ã«ãºãŒã ã广ã®äœæããããŸãã
3. æ©æ¢°åŠç¿ã®ããã®ããŒã¿æ¡åŒµ
åç»åæãå«ãæ©æ¢°åŠç¿ã®å¿çšã«ãããŠãé åã³ããŒã¯ããŒã¿æ¡åŒµæè¡ãšããŠäœ¿çšã§ããŸããåç»ãã¬ãŒã å ã®é¢å¿é åãã³ããŒããŠæäœããããšã§ãã¢ãã«ãããåºç¯å²ã®ããªãšãŒã·ã§ã³ã«ãããããã®æ±åèœåãåäžãããæ°ãããã¬ãŒãã³ã°ãµã³ãã«ãäœæã§ããŸãã
äŸïŒ åç»å ã®ãªããžã§ã¯ããæ€åºããã¢ãã«ããã¬ãŒãã³ã°ããŠããå Žåããããã®ãªããžã§ã¯ããå«ããã¬ãŒã ã®ç°ãªãé åãã³ããŒããèæ¯ãç §ææ¡ä»¶ãç°ãªãæ°ãããã¬ãŒã ã«è²Œãä»ããããšã§ã广çã«ããå€ãã®ãã¬ãŒãã³ã°ããŒã¿ãäœæã§ããŸãã
4. ã³ã³ãã³ãã¢ãã¬ãŒã·ã§ã³ãšæ€é²
æ¬æ¥ã®æå³ã§ã¯ãããŸããããé åã³ããŒã¯ã³ã³ãã³ãã¢ãã¬ãŒã·ã§ã³ã«å©çšã§ããŸããæ©å¯æ§ã®é«ãããŸãã¯äžé©åãªã³ã³ãã³ããå«ãç¹å®é åãç¹å®ãããã¬ãŒã ã®å¥ã®éšåããã³ããŒãããŒãããé»å¡ãã®é åããŸãã¯äºåã«å®çŸ©ããããã¹ã¯ã§çœ®ãæããããšãã§ããŸããããã¯ãæ³çããã³å«ççãªã¬ã€ãã©ã€ã³ãéµå®ãã責任ããå«ççãªæ¹æ³ã§è¡ãå¿ èŠããããŸãã
äŸïŒ äžéšã®å°åã§ã¯ãæ³èŠå¶éµå®ã®ããã«ç¹å®ã®ããŽãããã¹ãã®æ€é²ãå¿ èŠã«ãªãå ŽåããããŸããé åã³ããŒã«ããããããã®èŠçŽ ã®èªåçãªå¢šæ¶ããå¯èœã«ãªããŸãã
5. åç»ç·šéãšåæ
é åã³ããŒã¯ãWebããŒã¹ã®åç»ç·šéããŒã«ã«çµ±åããŠãé«åºŠãªåææ©èœãæäŸããããšãã§ããŸãããŠãŒã¶ãŒã¯ãç°ãªãåç»ãã¬ãŒã ããç¹å®ã®é åãéžæããŠã³ããŒããããããçµã¿åãããŠè€éãªã·ãŒã³ãèŠèŠå¹æãäœæã§ããŸãã
äŸïŒ åç»ãã¬ãŒã ã®é åãã³ããŒããŠæäœããæ©èœã«ãããåå²ç»é¢å¹æã®äœæããç°ãªãåç»èŠçŽ ãäºãã«éãåãããããšãæ Œæ®µã«å®¹æã«ãªããŸãã
WebCodecsã«ããVideoFrameé åã³ããŒã®å®è£
VideoFrameã®é åã³ããŒãå®è£
ããã«ã¯ãVideoFrameã€ã³ã¿ãŒãã§ãŒã¹ã®copyTo()ã¡ãœããã䜿çšããå¿
èŠããããŸãã以äžã«ãã®ããã»ã¹ã®å
èš³ã瀺ããŸãïŒ
1. VideoFrameã®ååŸ
ãŸããVideoFrameãªããžã§ã¯ããååŸããå¿
èŠããããŸããããã¯ã次ã®ãããªæ§ã
ãªææ®µã§å®çŸã§ããŸãïŒ
- åç»ã¹ããªãŒã ã®ãã³ãŒãïŒ
VideoDecoderAPIã䜿çšããŠãã¹ããªãŒã ããåç»ãã¬ãŒã ããã³ãŒãããŸãã - ã«ã¡ã©ããã®åç»ãã£ããã£ïŒ
getUserMedia()APIã䜿çšããŠã«ã¡ã©ããåç»ããã£ããã£ãããã£ããã£ãããã¬ãŒã ããVideoFrameãªããžã§ã¯ããäœæããŸãã - ImageBitmapããã®VideoFrameäœæïŒ
ImageBitmapãœãŒã¹ã䜿çšããŠVideoFrame()ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºããŸãã
2. ã³ããŒå ã®VideoFrameãäœæãã
次ã«ãã³ããŒãããé åãä¿æããã³ããŒå
ã®VideoFrameãªããžã§ã¯ããäœæããå¿
èŠããããŸããã³ããŒå
ãã¬ãŒã ã®å¯žæ³ãšãã©ãŒãããã¯ãã³ããŒããããšããé åã«é©ããŠããå¿
èŠããããŸãããã©ãŒãããã¯ãœãŒã¹ã®VideoFrameãšäºææ§ããªããã°ãªããŸãããæœåšçãªãã©ãŒããã倿ã®åé¡ãé¿ããããã«ããœãŒã¹ãšåããã©ãŒãããã䜿çšããããšãæ€èšããŠãã ããã
```javascript const sourceFrame = // ... obtain a VideoFrame object const regionWidth = 100; const regionHeight = 50; const destinationFrame = new VideoFrame(sourceFrame, { codedWidth: regionWidth, codedHeight: regionHeight, width: regionWidth, height: regionHeight, }); ```
3. copyTo()ã¡ãœããã䜿çšãã
ããã§ãcopyTo()ã¡ãœããã䜿çšããŠããœãŒã¹ãã¬ãŒã ããã³ããŒå
ãã¬ãŒã ã«é åãã³ããŒã§ããŸããcopyTo()ã¡ãœããã¯ãåŒæ°ãšããŠã³ããŒå
ã®VideoFrameãšããœãŒã¹ã®ç©åœ¢ããã®ä»ã®ã³ããŒãã©ã¡ãŒã¿ãå®çŸ©ããããã®ãªãã·ã§ã³ã®ãªããžã§ã¯ããåããŸãã
```javascript const sourceFrame = // ... obtain a VideoFrame object const destinationFrame = // ... create a destination VideoFrame object const copyOptions = { x: 50, // X-coordinate of the top-left corner of the source region y: 25, // Y-coordinate of the top-left corner of the source region width: 100, // Width of the source region height: 50, // Height of the source region }; sourceFrame.copyTo(destinationFrame, copyOptions); ```
4. ã³ããŒãããé åãåŠçãã
copyTo()ã¡ãœãããå®äºãããšãdestinationFrameã«ã¯ãœãŒã¹ãã¬ãŒã ããã³ããŒãããé åãå«ãŸããŸãããã®åŸããã®ãã¬ãŒã ãããã«åŠçã§ããŸããäŸãã°ããšã³ã³ãŒãããããcanvasã«è¡šç€ºããããæ©æ¢°åŠç¿ã¢ãã«ã®å
¥åãšããŠäœ¿çšãããã§ããŸãã
äŸïŒåçŽãªé åã³ããŒ
以äžã¯ãåºæ¬çãªé åã³ããŒã瀺ãå®å šãªäŸã§ãïŒ
```javascript async function copyRegion(sourceFrame, x, y, width, height) { const destinationFrame = new VideoFrame(sourceFrame, { codedWidth: width, codedHeight: height, width: width, height: height, }); await sourceFrame.copyTo(destinationFrame, { x: x, y: y, width: width, height: height, }); return destinationFrame; } // Example usage: async function processVideo(videoElement) { const videoTrack = videoElement.captureStream().getVideoTracks()[0]; const imageCapture = new ImageCapture(videoTrack); // Get a single frame from the video const bitmap = await imageCapture.grabFrame(); const sourceFrame = new VideoFrame(bitmap); bitmap.close(); // Copy a region from the source frame const copiedFrame = await copyRegion(sourceFrame, 100, 50, 200, 100); // Display the copied frame on a canvas const canvas = document.getElementById('outputCanvas'); canvas.width = copiedFrame.width; canvas.height = copiedFrame.height; const ctx = canvas.getContext('2d'); ctx.drawImage(copiedFrame, 0, 0); sourceFrame.close(); copiedFrame.close(); } ```
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
VideoFrameã®é åã³ããŒã¯å€§ããªå©ç¹ãæäŸããŸãããç¹ã«ãªã¢ã«ã¿ã€ã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã©ãŒãã³ã¹ãžã®åœ±é¿ãèæ ®ããããšãäžå¯æ¬ ã§ãïŒ
- ã¡ã¢ãªå²ãåœãŠïŒ æ°ãã
VideoFrameãªããžã§ã¯ãã®äœæã«ã¯ã¡ã¢ãªå²ãåœãŠã䌎ããé »ç¹ã«è¡ããããšããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãå¯èœæ§ããããŸããå¯èœãªå Žåã¯VideoFrameãªããžã§ã¯ããåå©çšããŠãã¡ã¢ãªã®ãªãŒããŒããããæå°éã«æããããšãæ€èšããŠãã ããã - ã³ããŒã®ãªãŒããŒãããïŒ
copyTo()ã¡ãœããèªäœããã¯ã»ã«ããŒã¿ã®ã³ããŒã䌎ããããç¹ã«å€§ããªé åã§ã¯èšç®ã³ã¹ããé«ããªãå¯èœæ§ããããŸããã³ããŒãããããŒã¿éãæå°éã«æããããã«ã³ãŒããæé©åããŠãã ããã - ãã©ãŒãããå€æïŒ ãœãŒã¹ãšã³ããŒå
ã®
VideoFrameãªããžã§ã¯ãã®ãã©ãŒããããç°ãªãå ŽåãcopyTo()ã¡ãœããããã©ãŒããã倿ãè¡ãå¿ èŠããããããã倧ããªãªãŒããŒãããã远å ããå¯èœæ§ããããŸããäºææ§ã®ãããã©ãŒãããã䜿çšããããšã§ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã - éåææäœïŒ
copyTo()æäœã¯ãç¹ã«ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãé¢äžããå Žåããã°ãã°éåæã§ããã¡ã€ã³ã¹ã¬ããããããã¯ããªãããã«ãæäœã®éåææ§ãé©åã«åŠçããŠãã ããã - ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ïŒ WebCodecsã¯å¯èœãªéãããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã掻çšããŸããæé©ãªããã©ãŒãã³ã¹ãåŸãããã«ããŠãŒã¶ãŒã®ãã©ãŠã¶ã§ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã«ãªã£ãŠããããšã確èªããŠãã ããããã©ãŠã¶ã®èšå®ãšãã©ã€ãã®äºææ§ã確èªããŠãã ããã
æé©åã®ããã®ãã¹ããã©ã¯ãã£ã¹
VideoFrameã®é åã³ããŒã®ããã©ãŒãã³ã¹ãšå¹çãæå€§åããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããïŒ
- VideoFrameãªããžã§ã¯ãã®åå©çšïŒ åã³ããŒæäœã§æ°ãã
VideoFrameãªããžã§ã¯ããäœæãã代ããã«ãå¯èœãªéãæ¢åã®ãªããžã§ã¯ããåå©çšããŸããããã«ãããã¡ã¢ãªå²ãåœãŠã®ãªãŒããŒããããåæžãããŸãã - ã³ããŒé åã®æå°åïŒ åç»ãã¬ãŒã ã®å¿ èŠãªé åã®ã¿ãã³ããŒããŸããäžå¿ èŠã«å€§ããªé åãã³ããŒãããšã³ããŒã®ãªãŒããŒããããå¢å ãããããé¿ããŠãã ããã
- äºææ§ã®ãããã©ãŒãããã®äœ¿çšïŒ ãã©ãŒããã倿ãé¿ããããã«ããœãŒã¹ãšã³ããŒå
ã®
VideoFrameãªããžã§ã¯ããäºææ§ã®ãããã©ãŒãããã§ããããšã確èªããŸãã倿ãé¿ããããªãå Žåã¯ãæç€ºçã«å®è¡ããçµæãåå©çšã®ããã«ãã£ãã·ã¥ããŸãã - ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®æŽ»çšïŒ ãŠãŒã¶ãŒã®ãã©ãŠã¶ã§ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã«ãªã£ãŠããããšã確èªããŠãã ããã
- éåææäœã®æé©åïŒ ã¡ã€ã³ã¹ã¬ããããããã¯ããªãããã«ã
copyTo()ã¡ãœããã®éåææ§ãé©åã«åŠçããŸããasync/awaitãPromisesã䜿çšããŠãéåææäœã广çã«ç®¡çããŸãã - ã³ãŒãã®ãããã¡ã€ãªã³ã°ïŒ ãã©ãŠã¶ã®éçºè ããŒã«ã䜿çšããŠã³ãŒãããããã¡ã€ãªã³ã°ããããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŸããã¡ã¢ãªäœ¿çšéãCPU䜿çšçãGPUã¢ã¯ãã£ããã£ã«ç¹ã«æ³šæãæã£ãŠãã ããã
- WebAssemblyã®æ€èšïŒ èšç®éã®å€ãã¿ã¹ã¯ã«ã¯ããã€ãã£ãã«è¿ãé床ã§å®è¡ã§ããã«ã¹ã¿ã ç»ååŠçã¢ã«ãŽãªãºã ãå®è£ ããããã«WebAssemblyã®äœ¿çšãæ€èšããŠãã ããã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
WebCodecsã¯åŒ·åãªæ©èœãæäŸããŸãããæœåšçãªã»ãã¥ãªãã£ãªã¹ã¯ã«æ³šæããããšãéèŠã§ãïŒ
- ããŒã¿æŒæŽ©ïŒ é åã³ããŒã«ãã£ãŠæå³ããæ©å¯ããŒã¿ãå ¬éããŠããªãããšã確èªããŠãã ãããå人ãç¹å®ã§ããæ å ±ïŒPIIïŒããã®ä»ã®æ©å¯ããŒã¿ãå«ãå¯èœæ§ã®ããé åãã³ããŒããéã«ã¯æ³šæããŠãã ããã
- æªæã®ããã³ãŒãã®æ³šå ¥ïŒ ä¿¡é Œã§ããªããœãŒã¹ããã®åç»ãåŠçããéã«ã¯ãæœåšçãªã³ãŒãæ³šå ¥ã®è匱æ§ã«æ³šæããŠãã ãããæªæã®ããã³ãŒããåç»ã¹ããªãŒã ã«åã蟌ãŸããã®ãé²ãããã«ããŠãŒã¶ãŒãæäŸããå ¥åããã¹ãŠãµãã¿ã€ãºããŠãã ããã
- ãµãŒãã¹æåŠïŒDoSïŒæ»æïŒ æªæã®ããæ»æè ãWebCodecså®è£ ã®è匱æ§ãæªçšããŠããµãŒãã¹æåŠæ»æã仿ããå¯èœæ§ããããŸãããããã®ãªã¹ã¯ã軜æžããããã«ããã©ãŠã¶ãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãææ°ã®ã»ãã¥ãªãã£ãããã§æŽæ°ãç¶ããŠãã ããã
- ã¯ãã¹ãªãªãžã³åé¡ïŒ ç°ãªããã¡ã€ã³ããåç»ã¹ããªãŒã ã«ã¢ã¯ã»ã¹ããéã®ã¯ãã¹ãªãªãžã³å¶éã«æ³šæããŠãã ãããã¯ãã¹ãªãªãžã³ã¢ã¯ã»ã¹ãèš±å¯ããããã«ãå¿ èŠãªCORSããããŒãèšå®ãããŠããããšã確èªããŠãã ããã
ãã©ãŠã¶ã®äºææ§
WebCodecsã¯æ¯èŒçæ°ããAPIã§ããããã©ãŠã¶ã®äºææ§ã¯æ§ã ã§ãã察象ãã©ãŠã¶ã§APIããµããŒããããŠããããšã確èªããããã«ãææ°ã®ãã©ãŠã¶äºææ§ãã£ãŒãã確èªããŠãã ããã2024幎åŸåã®æç¹ã§ãChromeãFirefoxãSafariãªã©ã®äž»èŠãªãã©ãŠã¶ã®ãµããŒãã¬ãã«ã¯ç°ãªããŸããåžžã«ç°ãªããã©ãŠã¶ã§ã³ãŒãããã¹ãããäžè²«ããåäœã確èªããŠãã ããã
çµè«
WebCodecsã®VideoFrameé åã³ããŒã¯ãå¹ççãªéšåãã¬ãŒã è€è£œãå¯èœã«ããWebã¢ããªã±ãŒã·ã§ã³ã«ãããåç»åŠçãšæé©åã®ããã®å¹
åºãå¯èœæ§ãéã匷åãªæ©èœã§ããcopyTo()ã¡ãœããã®èœåãçè§£ããããã©ãŒãã³ã¹ãšã»ãã¥ãªãã£ãžã®åœ±é¿ãèæ
®ããããšã§ãéçºè
ã¯ãã®æ©èœãå©çšããŠé©æ°çã§é«æ§èœãªWebããŒã¹ã®ã¡ãã£ã¢äœéšãåµé ã§ããŸããWebCodecsãæçããããåºç¯ãªãã©ãŠã¶ãµããŒããåŸãã«ã€ããŠãããã¯åç»ãä»ã®ã¡ãã£ã¢ãã©ãŒããããæ±ãWebéçºè
ã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ã«ãªãããšã¯ééããããŸããããã®æè¡ã®æœåšèœåãæå€§éã«åŒãåºãããã«ã¯ããŠãŒã¹ã±ãŒã¹ãšæé©åæŠç¥ã®ç¶ç¶çãªæ¢æ±ãéèŠã§ããWebCodecs APIã®ææ°ååãšãã°ããŒãã«ãªæèã§ã®äœ¿çšã«é¢ãããã¹ããã©ã¯ãã£ã¹ã«åžžã«æ³šæãæã£ãŠãã ããã